package com.tfjybj.itoo.exam.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.exam.entity.TemplateEntity;
import com.tfjybj.itoo.exam.model.QuestionModel;
import com.tfjybj.itoo.exam.model.QuestionTypeModel;
import com.tfjybj.itoo.exam.model.TemplateInfoModel;
import com.tfjybj.itoo.exam.model.TemplateModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * TemplateDao接口
 * template表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
@Repository("templateDao")
public interface TemplateDao extends BaseMapper<TemplateEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据模板名称模糊查询template
     *
     * @param courseId
     * @param name     模板名称
     * @return 模糊查询的template集合
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    List<TemplateModel> queryLikeName(@Param("courseId") String courseId, @Param("name") String name);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据操作人查询template
     *
     * @param operator   操作人
     * @param courseId   课程id
     * @param tempStatus
     * @return 查询的template
     * @author 邓立瑶
     * @since 2.0.0 2018年11月13日14:15:26
     */
    List<TemplateModel> queryByOperator(@Param("operator") String operator, @Param("courseId") String courseId, @Param("tempStatus") Integer tempStatus);

    /**
     * 根据组件方式+时间查询template
     *
     * @param organizingType 组卷方式
     * @param startTime      开始时间
     * @param endTime        结束时间
     * @return template集合
     * @author 邓立瑶
     * @since 2.0.0 2018-11-13 15:58:56
     */
    List<TemplateModel> queryByMethodAndTime(@Param("operator") String operator, @Param("organizingType") String organizingType, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查询所有组卷方式queryAllOrganization
     *
     * @return 查询的organizationType
     * @author 邓立瑶
     * @since 2.0.0 2018-11-13 15:58:56
     */
    List<TemplateEntity> queryAllOrganization();

    /**
     * 根据组卷方式和操作人查询queryByMethodOperator
     *
     * @return 查询的template
     * @author 邓立瑶
     * @since 2.0.0 2018年11月23日16:57:52
     */
    List<TemplateEntity> queryByMethodOperator(@Param("operator") String operator, @Param("organizingType") String organizingType);

    TemplateEntity queryExamStudentExamtem(@Param("templateId") String templateId);

    /**
     * 根据模板名称模糊查询template（限制操作人）
     * List<TemplateEntity> queryLikeName(@Param("name") String name);
     *
     * @param name     模板名称
     * @param operator 操作人
     * @return 模糊查询的template
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    List<TemplateEntity> queryTemplateByLikeNameAndOperator(@Param("name") String name, @Param("operator") String operator);

    List<QuestionModel> queryQuestion(@Param("questionTypeId") String questionTypeId, @Param("operator") String operator, @Param("questionClassifyId") String questionClassifyId, @Param("courseId") String courseId);

    List<QuestionTypeModel> queryQuestionType(@Param("courseId") String courseId, @Param("operator") String operator);

    boolean updataTemplate(@Param("id") String id, @Param("status") String status);

    /**
     * 更新IsExtract字段为1(随堂小练固定抽题用)
     *
     * @param templateId 模板id
     * @param operator   操作人
     * @return boolean
     * @author 任蒙蒙
     * @since 2019-1-30 10:36:05
     */
    boolean updateExtractCustomForFix(@Param("templateId") String templateId, @Param("operator") String operator);

    /**
     * 查询模板明细id(随堂小练固定抽题用)
     *
     * @param templateId     模板id
     * @param questionTypeId 题型id
     * @return String
     * @author 任蒙蒙
     * @since 2019-1-30 10:36:05
     */
    String selectTemplateDetailIdForFix(@Param("templateId") String templateId, @Param("questionTypeId") String questionTypeId);


    /**
     * 查询模板名称是否重复
     *
     * @param name
     * @return 模板名称是否重复
     * @author 贾建清
     * @since 2.0.0 2019-2-19 16:10:38
     */
    List<TemplateModel> queryTemplateName(@Param("name") String name);

    List<String> getByTemplateId(@Param("id") String id);

    List<String> getByTemplate(@Param("id") String id);

    int selectCountByDetail(@Param("templateDetailId") String templateDetailId);

    int selectCountExtract(@Param("templateDetailId") String templateDetailId);

    List<TemplateModel> queryByMethodOperatorandOrganizingType(@Param("operator") String operator, @Param("organizingType") String organizingType);

    int selectDetailCount(String id);

    /**
     * 根据模板id查询模板信息
     *
     * @param id 模板id
     * @return 模板信息
     * @author 贾建清
     * @since 2.0.0 2019-2-26 17:12:46
     */
    List<TemplateInfoModel> queryTemplateInfo(@Param("id") String id);
}
